package com.nami.im.network.model.message.v1;

import com.nami.im.network.model.message.MsgUser;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;
import java.util.List;

/**
 * 描述：
 *
 * @Author: lbc
 * @Date: 2023-07-26 14:14
 * @email: 594599620@qq.com
 * @Description: keep coding
 */
@Data
@ToString
public class MessageV1 implements Serializable {

    private static final long serialVersionUID = -8018362064274136268L;

    /**
     * 消息id
     */
    private String id;

    /**
     * 消息所属的会话 ID
     */
    private String cid;

    /**
     * 客户端生成 唯一消息id
     */
    private String clientMsgId;

    /**
     * 发送者
     */
    private String senderId;

    /**
     * 接收者
     */
    private String receiverId;

    /**
     * 消息类型
     */
    private Integer type;

    /**
     * 消息内容
     */
    private String payload;

    /**
     * 文本类型
     * text
     * voice
     * media
     * picture
     */
    private String payloadType;

    /**
     * 消息所属会话的类型
     * c2c C2C(Client to Client, 端到端) 会话
     * c2g GROUP(群组) 会话
     * system SYSTEM(系统) 会话
     */
    private String conversationType;


    private MsgUser senderInfo;

    /**
     * 消息的流向
     * <p>
     * up 上行消息
     * downmsg 下行消息
     */
    private String flow;

    /**
     * 群聊时此字段存储被 at 的群成员的 userID
     */
    private List<String> atUserList;

    /**
     * 消息自定义数据（云端保存，会发送到对端，程序卸载重装后还能拉取到）
     */
    private String cloudCustomData;

    /**
     * C2C 消息对端是否已读，true 标识对端已读。更新时机
     * 对端调用 setMessageRead 将会话下所有消息上报已读，成功后会话未读数清零
     */
    private Boolean isPeerRead;

    /**
     * 是否需要已读回执，true 标识需要（仅用于群消息）
     */
    private Boolean needReadReceipt;

    /**
     * 消息已读回执信息
     */
    private String readReceiptInfo;

    /**
     * 消息撤回者的 userID
     */
    private String revoker;

    /**
     * 离线消息推送
     */
    private String offlinePushInfo;

    /**
     * 卡片id
     */
    private String cardTemplateId;

    /**
     * 卡片内容
     */
    private String cardBody;

    /**
     * 是否卡片消息
     */
    private Boolean isCardMsg;

    /**
     * 消息时间戳。单位：秒
     */
    private Long time;

    private Integer seq;

}
